
import java.util.Stack;

public  abstract class  peradorr  {
	protected String linea, operando, error;
	protected char dato, dato2;
	protected int result, operador, contador, largo, tipo, ultimo,ultimo2;
	protected boolean verific;
	protected String fact;
	
public peradorr(){
		//se inicializan todos los valores
		linea = " ";
		 
		 dato = ' ';
		 result = 0;
		 operador = 0;
		 contador = 0;
		 largo = 0;
		 error = " ";
		 tipo = 0;
		 
	}

	
	//devuleve el String para imprimirlo
	public String getlinea(){
		return linea;
	}
	//se le asigna el string ingresado a la variable linea para tener control desde esta clase
	public void setlinea(String lin){
		linea = lin;
	}
	//se devuelve el contador que lleva la cuenta de en que posision del estring se esta
	public int getcont(){
		return contador;
	}
	//se suma al contador 2, para moverse solo donde hay datos 
	public void setcont(){
		contador = contador + 1;
	}
	//se ferifica que el formato de la instruccion ingresada este correcta, si no hay error devuelve true, y si lo hay false y termina el programa
	public boolean verificador(){
	dato = linea.charAt(contador);
	//se compureba que los primeros dos datos sean un valor numerico
	if(contador < 2){
		if((dato != '1') && (dato != '2') && (dato != '3') && (dato != '4') && (dato != '5') &&(dato != '6') && (dato != '7') && (dato != '8') &&
				(dato != '9') && (dato != '0')){
					verific = false;
					tipo = 0;
				}
		else{
			operador = Character.getNumericValue(dato);
				verific = true;
				}			
		}
		// verifica que en las pociciones donde debe haber un signo haya un signo, y donde debe haber un numero haya un numero
		else{
		
				if(((dato == '+') || (dato == '-') || (dato == '/') || (dato == '*') ) || ((dato == '1') || (dato == '2') || (dato == '3') || (dato == '4') || (dato == '5') ||(dato == '6') || (dato == '7') || (dato == '8') ||
				(dato == '9') || (dato == '0'))) {
				if((dato == '+') || (dato == '-') || (dato == '/') || (dato == '*') ){
					if(contador >= 2){
					tipo = 1;
					dato2 = dato;
					verific = true;
					}
					else{
						
					verific = false;
					
					}
					
					}
				else{
				tipo = 0;
				operador = Character.getNumericValue(dato);
					verific = true;
				}
				}
				else{
					verific = false;
				}
			
		
	}
	return verific;
	}
	
	//en este metodo se sacan los dos datos que se tengan en la pila, y se operan segun el signo indicado, luego se realiza un push para ingresar el resultado a la pila


	public int gettipo(){
		return tipo;
	}
	public int getresult(){
		return result;
	}
	public int getop(){
	return operador;
	}
	public abstract void push();
	public abstract void pop();
	//public abstract void getultimo();
	public void setlargo(int d){
	largo = largo + d;
	
	}
	public String getfac(){
	
	return fact;
	}
	protected void seter(String pal){
	error = pal;
	}
	public char getdat(){
	return dato;
	}
	public int getul(){
	return ultimo;
	}
	}





